//单例模式
//懒汉模式
class  singletonLazy{
    //使用volatie避免重排序
    private volatile  static  singletonLazy instance=null;
    public static  singletonLazy get(){
        //判断是否要加速
        if(instance==null){
            synchronized (singletonLazy.class){
                //判断是否要创建对象
                if(instance==null){
                    instance=new singletonLazy();
                }
            }
        }
        //已经存在一个实例对象，直接返回instance；
        return  instance;
    }
}
//饿汉模式
class  singleton{
    //在类加载阶段，就把实例创建出来。
    private static  singleton instance=new singleton();
    // 如果需要使用这个唯一实例, 统一通过 Singleton.get() 方式来获取.
    public static singleton get(){
        return instance;
    }
    // 把构造方法设为 private. 在类外面,
    // 就无法通过 new 的方式来创建这个 Singleton 实例了!!
    private singleton(){}
}
public class ThreadDemo2 {
    public static void main(String[] args) {
        //饿汉模式
        singleton s=singleton.get();//创建一个唯一的实例
        singleton s3=singleton.get();
        System.out.println(s==s3);
        //懒汉模式
        singletonLazy s1=singletonLazy.get();
        singletonLazy s2=singletonLazy.get();
        System.out.println(s1==s2);
    }
}
